package com.cskaoyan.javase.basic._2variable._3notice;

/**
 * 浮点数的精度问题/浮点型的精度问题
 * 对于十进制小数转换成二进制小数时,很容易出现无限循环的情况
 * 比如0.1
 * 这里涉及一个二进制表示小数的转换问题，规则如下：
 * 十进制正小数（0.开头）转换成二进制，先用小数部分乘以2，取结果的整数部分(必然是1或者0)，
 * 然后小数部分继续乘2
 * 直到小数部分为0，或者已经达到了最大的位数
 * 最终的结果（0.开头）正序排列
 *
 * 0.1 * 2 = 0.2 ---> 0
 * 0.2 * 2 = 0.4 ---> 0
 * 0.4 * 2 = 0.8 ---> 0
 * 0.8 * 2 = 1.6 ---> 1
 * 0.6 * 2 = 1.2 ---> 1
 * 0.2 * 2 = 0.4 ---> 0
 * ....
 * 这样用浮点数表示0.1,因为有效位数的不同,float和double的0.1完全不是同一个数
 *
 * @since 15:05
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        float a = 0.1F;
        double b = 0.1;
        System.out.println(a == b);
        System.out.println(1 - 0.9);
        System.out.println(1 - 0.9F);
    }
}
